const {ipcRenderer, remote} = require('electron')

window.addEventListener('DOMContentLoaded', async () => {
  //https://www.electronjs.org/docs/latest/api/ipc-renderer/#ipcrenderersendchannel-args
  //注意能发送的数据类型
  /*
    通过通道向主进程发送异步消息以及参数。 参数将使用结构化克隆算法进行序列化，就像 window.postMessage 一样，因此不会包含原型链。 发送 Functions、Promises、Symbols、WeakMaps 或 WeakSets 将抛出异常。

    注意：发送非标准 JavaScript 类型（例如 DOM 对象或特殊 Electron 对象）将引发异常。

    由于主进程不支持诸如 ImageBitmap、File、DOMMatrix 等 DOM 对象，因此这些对象无法通过 Electron 的 IPC 发送到主进程，因为主进程无法对其进行解码。 尝试通过 IPC 发送此类对象将导致错误。
  */
  class A {
    doA(){
      console.log('doA')
    }
  }
  class B extends A{}

  console.log(new B());
  ipcRenderer.send('do-some-work', 1, 'string123',{a:1,b:2},new B(),new Date())
  //todo 有些内置对象是没法传递的（上面说过, ImageBitmap、File、DOMMatrix 等 DOM 对象, 或则webrtc的一些对象）,
  //  但你要是把这些对象方在一个普通的对象里作为其某个属性, 貌似就又能够传递了

  ipcRenderer.on('reply', (event, numberElm,stringElm,objElm) => {
    document.getElementById('message').innerHTML = stringElm;

    console.log(typeof numberElm, numberElm);
    console.log(typeof stringElm, stringElm);
    console.log(stringElm.slice(0, 3));
    console.log(stringElm.__proto__);
    console.log(typeof objElm, objElm);
  });

  //注意 如果↓ 放在.on('reply',...) 前, 那么.on('reply',...)的回调不会执行
  const res = await ipcRenderer.invoke('bbb', 'afwf')
  console.log('res:',res);
});
